Added a few utility functions for profiling; instrument the code, make it
authorFederico Mena Quintero <federico@ximian.com>
Wed, 20 Jul 2005 02:11:37 +0000 (02:11 +0000)
committerFederico Mena Quintero <federico@src.gnome.org>
Wed, 20 Jul 2005 02:11:37 +0000 (02:11 +0000)
2005-07-19  Federico Mena Quintero  <federico@ximian.com>

* gtk/gtkfilechooserdefault.c: Added a few utility functions for
profiling; instrument the code, make it conditional.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gtk/gtkfilechooserdefault.c

index bbd90a774ac3b5d79c4cdac15e0211281850ceb7..4077a6b75472d55cddd22279012b76675d943c28 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-07-19  Federico Mena Quintero  <federico@ximian.com>
+
+       * gtk/gtkfilechooserdefault.c: Added a few utility functions for
+       profiling; instrument the code, make it conditional.
+
 2005-07-19  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtkentry.c (gtk_entry_move_forward_word): don't iterate
index bbd90a774ac3b5d79c4cdac15e0211281850ceb7..4077a6b75472d55cddd22279012b76675d943c28 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-19  Federico Mena Quintero  <federico@ximian.com>
+
+       * gtk/gtkfilechooserdefault.c: Added a few utility functions for
+       profiling; instrument the code, make it conditional.
+
 2005-07-19  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtkentry.c (gtk_entry_move_forward_word): don't iterate
index bbd90a774ac3b5d79c4cdac15e0211281850ceb7..4077a6b75472d55cddd22279012b76675d943c28 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-19  Federico Mena Quintero  <federico@ximian.com>
+
+       * gtk/gtkfilechooserdefault.c: Added a few utility functions for
+       profiling; instrument the code, make it conditional.
+
 2005-07-19  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtkentry.c (gtk_entry_move_forward_word): don't iterate
index a04a3b42a9f09fe1708c40e676e073f0597a9972..3bcaccb1eb1452f0a4d538337cc74129884cb9e5 100644 (file)
 #include <string.h>
 #include <time.h>
 
+\f
+
+/* Profiling stuff */
+
+#undef PROFILE_FILE_CHOOSER
+#ifdef PROFILE_FILE_CHOOSER
+#include <unistd.h>
+
+#define PROFILE_INDENT 4
+static int profile_indent;
+
+static void
+profile_add_indent (int indent)
+{
+  profile_indent += indent;
+  if (profile_indent < 0)
+    g_error ("You screwed up your indentation");
+}
+
+void
+_gtk_file_chooser_profile_log (const char *func, int indent, const char *msg1, const char *msg2)
+{
+  char *str;
+
+  if (indent < 0)
+    profile_add_indent (indent);
+
+  if (profile_indent == 0)
+    str = g_strdup_printf ("MARK: %s %s %s", func, msg1 ? msg1 : "", msg2 ? msg2 : "");
+  else
+    str = g_strdup_printf ("MARK: %*c %s %s %s", profile_indent - 1, ' ', func, msg1 ? msg1 : "", msg2 ? msg2 : "");
+
+  access (str, F_OK);
+  g_free (str);
+
+  if (indent > 0)
+    profile_add_indent (indent);
+}
+
+#define profile_start(x, y) _gtk_file_chooser_profile_log (G_STRFUNC, PROFILE_INDENT, x, y)
+#define profile_end(x, y) _gtk_file_chooser_profile_log (G_STRFUNC, -PROFILE_INDENT, x, y)
+#define profile_msg(x, y) _gtk_file_chooser_profile_log (NULL, 0, x, y)
+#else
+#define profile_start(x, y)
+#define profile_end(x, y)
+#define profile_msg(x, y)
+#endif
+
+\f
+
 typedef struct _GtkFileChooserDefaultClass GtkFileChooserDefaultClass;
 
 #define GTK_FILE_CHOOSER_DEFAULT_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_FILE_CHOOSER_DEFAULT, GtkFileChooserDefaultClass))
@@ -1011,6 +1061,8 @@ change_folder_and_display_error (GtkFileChooserDefault *impl,
   gboolean result;
   GtkFilePath *path_copy;
 
+  profile_start ("start", (char *) path);
+
   /* We copy the path because of this case:
    *
    * list_row_activated()
@@ -1030,6 +1082,8 @@ change_folder_and_display_error (GtkFileChooserDefault *impl,
 
   gtk_file_path_free (path_copy);
 
+  profile_end ("end", (char *) path);
+
   return result;
 }
 
@@ -1094,8 +1148,10 @@ shortcuts_reload_icons (GtkFileChooserDefault *impl)
 {
   GtkTreeIter iter;
 
+  profile_start ("start", NULL);
+
   if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (impl->shortcuts_model), &iter))
-    return;
+    goto out;
 
   do {
     gpointer data;
@@ -1135,6 +1191,10 @@ shortcuts_reload_icons (GtkFileChooserDefault *impl)
          g_object_unref (pixbuf);
       }
   } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model),&iter));
+
+ out:
+
+  profile_end ("end", NULL);
 }
 
 static void 
@@ -1179,6 +1239,8 @@ get_file_info (GtkFileSystem      *file_system,
   GtkFileInfo *info;
   GError *tmp = NULL;
 
+  profile_start ("start", (char *) path);
+
   parent_path = NULL;
   info = NULL;
 
@@ -1210,6 +1272,8 @@ get_file_info (GtkFileSystem      *file_system,
       g_error_free (tmp);
     }
 
+  profile_end ("end", (char *) path);
+
   return info;
 }
 
@@ -1221,11 +1285,18 @@ check_is_folder (GtkFileSystem      *file_system,
 {
   GtkFileFolder *folder;
 
+  profile_start ("start", (char *) path);
+
   folder = gtk_file_system_get_folder (file_system, path, 0, error);
   if (!folder)
-    return FALSE;
+    {
+      profile_end ("end - is not folder", (char *) path);
+      return FALSE;
+    }
 
   g_object_unref (folder);
+
+  profile_end ("end", (char *) path);
   return TRUE;
 }
 
@@ -1247,6 +1318,8 @@ shortcuts_insert_path (GtkFileChooserDefault *impl,
   gpointer data;
   GtkTreeIter iter;
 
+  profile_start ("start", is_volume ? "volume" : (char *) path);
+
   if (is_volume)
     {
       data = volume;
@@ -1257,7 +1330,10 @@ shortcuts_insert_path (GtkFileChooserDefault *impl,
   else
     {
       if (!check_is_folder (impl->file_system, path, error))
-       return FALSE;
+       {
+         profile_end ("end - is not folder", NULL);
+         return FALSE;
+       }
 
       if (label)
        label_copy = g_strdup (label);
@@ -1266,7 +1342,10 @@ shortcuts_insert_path (GtkFileChooserDefault *impl,
          GtkFileInfo *info = get_file_info (impl->file_system, path, TRUE, error);
 
          if (!info)
-           return FALSE;
+           {
+             profile_end ("end - could not get info", (char *) path);
+             return FALSE;
+           }
 
          label_copy = g_strdup (gtk_file_info_get_display_name (info));
          gtk_file_info_free (info);
@@ -1296,6 +1375,8 @@ shortcuts_insert_path (GtkFileChooserDefault *impl,
   if (pixbuf)
     g_object_unref (pixbuf);
 
+  profile_end ("end", NULL);
+
   return TRUE;
 }
 
@@ -1307,9 +1388,14 @@ shortcuts_append_home (GtkFileChooserDefault *impl)
   GtkFilePath *home_path;
   GError *error;
 
+  profile_start ("start", NULL);
+
   home = g_get_home_dir ();
   if (home == NULL)
-    return;
+    {
+      profile_end ("end - no home directory!?", NULL);
+      return;
+    }
 
   home_path = gtk_file_system_filename_to_path (impl->file_system, home);
 
@@ -1319,6 +1405,8 @@ shortcuts_append_home (GtkFileChooserDefault *impl)
     error_getting_info_dialog (impl, home_path, error);
 
   gtk_file_path_free (home_path);
+
+  profile_end ("end", NULL);
 }
 
 /* Appends the ~/Desktop directory to the shortcuts model */
@@ -1328,12 +1416,17 @@ shortcuts_append_desktop (GtkFileChooserDefault *impl)
   char *name;
   GtkFilePath *path;
 
+  profile_start ("start", NULL);
+
 #ifdef G_OS_WIN32
   name = _gtk_file_system_win32_get_desktop ();
 #else
   const char *home = g_get_home_dir ();
   if (home == NULL)
-    return;
+    {
+      profile_end ("end - no home directory!?", NULL);
+      return;
+    }
 
   name = g_build_filename (home, "Desktop", NULL);
 #endif
@@ -1347,6 +1440,8 @@ shortcuts_append_desktop (GtkFileChooserDefault *impl)
    */
 
   gtk_file_path_free (path);
+
+  profile_end ("end", NULL);
 }
 
 /* Appends a list of GtkFilePath to the shortcuts model; returns how many were inserted */
@@ -1358,6 +1453,8 @@ shortcuts_append_paths (GtkFileChooserDefault *impl,
   int num_inserted;
   gchar *label;
 
+  profile_start ("start", NULL);
+
   /* As there is no separator now, we want to start there.
    */
   start_row = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR);
@@ -1384,6 +1481,8 @@ shortcuts_append_paths (GtkFileChooserDefault *impl,
       g_free (label);
     }
 
+  profile_end ("end", NULL);
+
   return num_inserted;
 }
 
@@ -1475,6 +1574,8 @@ shortcuts_add_volumes (GtkFileChooserDefault *impl)
   int n;
   gboolean old_changing_folders;
 
+  profile_start ("start", NULL);
+
   old_changing_folders = impl->changing_folder;
   impl->changing_folder = TRUE;
 
@@ -1518,6 +1619,8 @@ shortcuts_add_volumes (GtkFileChooserDefault *impl)
     gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (impl->shortcuts_filter_model));
 
   impl->changing_folder = old_changing_folders;
+
+  profile_end ("end", NULL);
 }
 
 /* Inserts a separator node in the shortcuts list */
@@ -1550,6 +1653,8 @@ shortcuts_add_bookmarks (GtkFileChooserDefault *impl)
   GtkFilePath *combo_selected = NULL;
   gboolean is_volume;
   gpointer col_data;
+
+  profile_start ("start", NULL);
         
   old_changing_folders = impl->changing_folder;
   impl->changing_folder = TRUE;
@@ -1613,6 +1718,8 @@ shortcuts_add_bookmarks (GtkFileChooserDefault *impl)
     }
   
   impl->changing_folder = old_changing_folders;
+
+  profile_end ("end", NULL);
 }
 
 /* Appends a separator and a row to the shortcuts list for the current folder */
@@ -4506,6 +4613,8 @@ gtk_file_chooser_default_style_set (GtkWidget *widget,
 {
   GtkFileChooserDefault *impl;
 
+  profile_start ("start", NULL);
+
   impl = GTK_FILE_CHOOSER_DEFAULT (widget);
 
   if (GTK_WIDGET_CLASS (parent_class)->style_set)
@@ -4515,6 +4624,8 @@ gtk_file_chooser_default_style_set (GtkWidget *widget,
     change_icon_theme (impl);
 
   g_signal_emit_by_name (widget, "default-size-changed");
+
+  profile_end ("end", NULL);
 }
 
 static void
@@ -4587,6 +4698,8 @@ gtk_file_chooser_default_map (GtkWidget *widget)
 {
   GtkFileChooserDefault *impl;
 
+  profile_start ("start", NULL);
+
   impl = GTK_FILE_CHOOSER_DEFAULT (widget);
 
   GTK_WIDGET_CLASS (parent_class)->map (widget);
@@ -4598,6 +4711,8 @@ gtk_file_chooser_default_map (GtkWidget *widget)
     }
 
   bookmarks_changed_cb (impl->file_system, impl);
+
+  profile_end ("end", NULL);
 }
 
 static gboolean
@@ -4776,6 +4891,8 @@ load_timeout_cb (gpointer data)
 {
   GtkFileChooserDefault *impl;
 
+  profile_start ("start", NULL);
+
   GDK_THREADS_ENTER ();
 
   impl = GTK_FILE_CHOOSER_DEFAULT (data);
@@ -4790,6 +4907,8 @@ load_timeout_cb (gpointer data)
 
   GDK_THREADS_LEAVE ();
 
+  profile_end ("end", NULL);
+
   return FALSE;
 }
 
@@ -4886,12 +5005,20 @@ show_and_select_paths (GtkFileChooserDefault *impl,
   gboolean have_hidden;
   gboolean have_filtered;
 
+  profile_start ("start", NULL);
+
   if (!only_one_path && !paths)
-    return TRUE;
+    {
+      profile_end ("end", NULL);
+      return TRUE;
+    }
 
   folder = gtk_file_system_get_folder (impl->file_system, parent_path, GTK_FILE_INFO_IS_HIDDEN, error);
   if (!folder)
-    return FALSE;
+    {
+      profile_end ("end", NULL);
+      return FALSE;
+    }
 
   success = FALSE;
   have_hidden = FALSE;
@@ -4944,7 +5071,10 @@ show_and_select_paths (GtkFileChooserDefault *impl,
   g_object_unref (folder);
 
   if (!success)
-    return FALSE;
+    {
+      profile_end ("end", NULL);
+      return FALSE;
+    }
 
   if (have_hidden)
     g_object_set (impl, "show-hidden", TRUE, NULL);
@@ -4967,6 +5097,7 @@ show_and_select_paths (GtkFileChooserDefault *impl,
        }
     }
 
+  profile_end ("end", NULL);
   return TRUE;
 }
 
@@ -5012,6 +5143,8 @@ static void
 browse_files_model_finished_loading_cb (GtkFileSystemModel    *model,
                                        GtkFileChooserDefault *impl)
 {
+  profile_start ("start", NULL);
+
   if (impl->load_state == LOAD_PRELOAD)
     {
       load_remove_timer (impl);
@@ -5026,6 +5159,7 @@ browse_files_model_finished_loading_cb (GtkFileSystemModel    *model,
       /* We can't g_assert_not_reached(), as something other than us may have
        *  initiated a folder reload.  See #165556.
        */
+      profile_end ("end", NULL);
       return;
     }
 
@@ -5035,6 +5169,8 @@ browse_files_model_finished_loading_cb (GtkFileSystemModel    *model,
 
   pending_select_paths_process (impl);
   set_busy_cursor (impl, FALSE);
+
+  profile_end ("end", NULL);
 }
 
 /* Gets rid of the old list model and creates a new one for the current folder */
@@ -5044,6 +5180,8 @@ set_list_model (GtkFileChooserDefault *impl,
 {
   g_assert (impl->current_folder != NULL);
 
+  profile_start ("start", NULL);
+
   load_remove_timer (impl); /* This changes the state to LOAD_EMPTY */
 
   if (impl->browse_files_model)
@@ -5068,6 +5206,7 @@ set_list_model (GtkFileChooserDefault *impl,
   if (!impl->browse_files_model)
     {
       set_busy_cursor (impl, FALSE);
+      profile_end ("end", NULL);
       return FALSE;
     }
 
@@ -5080,6 +5219,8 @@ set_list_model (GtkFileChooserDefault *impl,
 
   install_list_model_filter (impl);
 
+  profile_end ("end", NULL);
+
   return TRUE;
 }
 
@@ -5137,6 +5278,8 @@ gtk_file_chooser_default_update_current_folder (GtkFileChooser    *chooser,
   GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser);
   gboolean result;
 
+  profile_start ("start", (char *) path);
+
   g_assert (path != NULL);
 
   if (impl->local_only &&
@@ -5147,15 +5290,22 @@ gtk_file_chooser_default_update_current_folder (GtkFileChooser    *chooser,
                   GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
                   _("Cannot change to folder because it is not local"));
 
+      profile_end ("end - not local", (char *) path);
       return FALSE;
     }
 
   /* Test validity of path here.  */
   if (!check_is_folder (impl->file_system, path, error))
-    return FALSE;
+    {
+      profile_end ("end - not a folder", (char *) path);
+      return FALSE;
+    }
 
   if (!_gtk_path_bar_set_path (GTK_PATH_BAR (impl->browse_path_bar), path, keep_trail, error))
-    return FALSE;
+    {
+      profile_end ("end - could not set path bar", (char *) path);
+      return FALSE;
+    }
 
   if (impl->current_folder != path)
     {
@@ -5198,6 +5348,7 @@ gtk_file_chooser_default_update_current_folder (GtkFileChooser    *chooser,
 
   g_signal_emit_by_name (impl, "selection-changed", 0);
 
+  profile_end ("end", NULL);
   return result;
 }
 
@@ -6691,6 +6842,8 @@ list_icon_data_func (GtkTreeViewColumn *tree_column,
   GdkPixbuf *pixbuf;
   const GtkFileInfo *info; 
   gboolean sensitive = TRUE;
+
+  profile_start ("start", NULL);
   
   info = get_list_file_info (impl, iter);
 
@@ -6722,6 +6875,8 @@ list_icon_data_func (GtkTreeViewColumn *tree_column,
     
   if (pixbuf)
     g_object_unref (pixbuf);
+
+  profile_end ("end", NULL);
 }
 
 static void